package com.rpframework.website.device.service;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import com.rpframework.core.BaseService;
import com.rpframework.core.api.FileService;
import com.rpframework.utils.AlgorithmEnum;
import com.rpframework.utils.AlgorithmUtils;
import com.rpframework.utils.NumberUtils;
import com.rpframework.utils.Pager;
import com.rpframework.website.device.dao.IUserDao;
import com.rpframework.website.device.domain.User;
import com.rpframework.website.device.util.HConstants;

/**
 * 
 * @author zhangli
 * @date 2016年3月23日 下午5:50:24
 */
@Service
public class UserService extends BaseService {
	public  @Resource IUserDao iDao;
	@Resource FileService fileService;
	
	
	public Pager<User> getPager(Pager<User> pager) {
		long startTime = System.currentTimeMillis();
		List<User> list = iDao.doPager(this.packageMyBatisParam(pager));
		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	/**
	 * 根据手机号查询用户
	 * @param contact
	 * @return
	 */
	public User findUserByContact(String contact) {
		return iDao.findUserByContact(contact);
	}
	
	/**
	 * 保存 修改用户
	 * @param user
	 * @return
	 */
	public boolean doSaveOrUpdate(User user){
		if(user == null) {
			throw new IllegalArgumentException("非法参数!");
		}
		if(NumberUtils.isValid(user.getId())) {//update
			User userDB = iDao.select(user.getId());
			Assert.notNull(userDB, "更新时找不到实体 " + user.getId());
			if(StringUtils.isBlank(user.getHeadImg())){ user.setHeadImg(userDB.getHeadImg()); }
			user.setModifyTime(System.currentTimeMillis() / 1000);
			return iDao.update(user);
		}
		User u = iDao.findUserByContact(user.getTel());
		if(u != null){
			throw new IllegalArgumentException("已经存在的手机号:" + u.getTel());
		}
		String md5Pwd = AlgorithmUtils.encodePassword(user.getPassword(), AlgorithmEnum.MD5);
		user.setPassword(md5Pwd);
		user.setCreateTime(System.currentTimeMillis() / 1000);
		return iDao.insert(user);
	}
	/**
	 * 查询登录记录
	 * @param user
	 * @param request
	 * @return
	 * @time 2016年3月23日 下午5:51:10
	 */
	public boolean doLoginRecord(User user, HttpServletRequest request) {
		user.setLastLoginIp(user.getLoginIp()) ;
		user.setLoginIp(request.getRemoteAddr());
		user.setLastLoginTime(user.getLoginTime());
		user.setLoginTime(System.currentTimeMillis()/1000);
		return iDao.update(user);
	}

	/**
	 * 修改密码
	 * @param userId
	 * @param oldPassword
	 * @param newPassword
	 * @return
	 * @time 2016年3月23日 下午5:51:27
	 */
	public boolean changePassword(Integer userId,String oldPassword, String newPassword) {
		User user = select(userId);
		Assert.notNull(user);
		return changePassword(user, oldPassword, newPassword);
	}
	
	public boolean changePassword(User user,String oldPassword, String newPassword) {
		
		if(StringUtils.isBlank(oldPassword) || StringUtils.isBlank(newPassword)) {
			throw new IllegalArgumentException("非法参数!");
		}
		
		String oldPasswordMD5 = AlgorithmUtils.encodePassword(oldPassword, AlgorithmEnum.MD5);
		if(!StringUtils.equals(oldPasswordMD5, user.getPassword())) {
			throw new IllegalArgumentException("原始密码不一致!");
		}
		
		if(StringUtils.equals(newPassword, oldPassword)) {
			throw new IllegalArgumentException("俩次密码一致!");
		}
		
		String newPasswordMD5 = AlgorithmUtils.encodePassword(newPassword, AlgorithmEnum.MD5);
		user.setPassword(newPasswordMD5);
		
		return iDao.update(user);
	}

	/**
	 * 修改状态
	 * @param id
	 * @return
	 * @time 2016年3月23日 下午5:52:21
	 */
	public boolean doUpdateState(Integer id) {
		if(NumberUtils.isValid(id)){
			User t = iDao.select(id);
			if(t.getState() == HConstants.EntityState.STATE_NORMAL){
				t.setState(HConstants.EntityState.STATE_DISABLE);
			}else{
				t.setState(HConstants.EntityState.STATE_NORMAL);
			}
			t.setModifyTime(System.currentTimeMillis()/1000);
			return iDao.update(t);
		}
		return false;
	}

	public List<User> searchIdList() {
		return iDao.searchIdList();
	}

}
